home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
pascal
/
totsrc11.zip
/
TOTMENU.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-06-08
|
56KB
|
2,056 lines
{ Copyright 1991 TechnoJock Software, Inc. }
{ All Rights Reserved }
{ Restricted by License }
{ Build # 1.10b }
Unit totMENU;
{$I TOTFLAGS.INC}
{
Development Notes:
Mar 10, 1991 1.00a Enabled immediate selection
when no sub menu.
Apr 4, 1991 1.00b Modified EZPULL.Done
Apr 22, 1991 1.00c corrected '=' topic
Apr 26, 1991 1.00d corrected message clearing
May 3, 1991 1.00e ""
May 7, 1991 1.00f allowed setting of sub-menus XY
May 23, 1991 1.00g Added reaction to Mouse method 1
Jun 24, 1991 1.00h Cleared Lotus menu when sub called
Jul 24, 1991 1.00i Hide non-selectable items from mouse clicks
Jan 23, 1992 1.00j Checked active status in hotkey selection
Oct 2, 1992 1.00k Corrected menu clearing in LotusMenuOBJ
Jan 4, 1993 1.10 Corrected Range Check error on Pullmenus
May 3, 1993 1.10a Restored menu message when sub-sub removed
May 9, 1993 1.10b Allowed for an empty drop-down.
Thanks to Arnold Gordijn!
}
INTERFACE
uses DOS, CRT,
totLOOK, totSYS, totINPUT, totFAST, totWIN, totSTR, totIO1, totLINK;
CONST
EscapeID = 65535;
LeftID = 65534;
RightID = 65533;
DriftID = 65532;
TYPE
BaseMenuPtr = ^BaseMenuOBJ;
MenuItemPtr = ^MenuItem;
MenuItem = record
NextNode: MenuItemPtr;
TxtPtr: pointer;
MsgPtr: pointer;
HK: word;
ID: word;
Active: boolean;
SubMenu: BaseMenuPtr;
end;
pBaseMenuOBJ = ^BaseMenuOBJ;
BaseMenuOBJ = object
vItemStack: MenuItemPtr;
vTotalItems: byte;
vActiveItem: byte;
vGap: byte;
vMsgX: byte;
vMsgY: byte;
vX: byte;
vY: byte;
vWidth: byte;
vLastKey: word;
vAllowEsc: boolean;
vUsedInPull: boolean;
vPickOff: boolean;
vSubActive: boolean;
vMenuHiHot: byte;
vMenuHiNorm: byte;
vMenuLoHot: byte;
vMenuLoNorm: byte;
vMenuOff: byte;
vHelpHook: HelpProc;
vHelpKey: word;
vMsgVisible: boolean;
{methods...}
constructor Init;
procedure AddFullItem(Txt:StrVisible; ID,HK:word; Msg:StrVisible; SubM:BaseMenuPtr);
procedure AddItem(Txt:StrVisible);
procedure SetTopic(Item:byte; Txt:StrVisible);
procedure SetHK(Item:byte; HK:word);
procedure SetMessage(Item:byte; Msg:StrVisible);
procedure SetID(Item:byte; ID:word);
procedure SetStatus(Item:byte; On:boolean);
procedure SetSubMenu(Item:byte;SubMenu:BaseMenuPtr);
procedure SetGap(G:byte);
procedure SetActiveItem(Item:byte);
procedure SetMessageXY(X,Y:byte);
procedure SetMenuXY(X,Y:byte);
procedure SetHelpKey(K:word);
procedure SetHelpHook(Proc:HelpProc);
procedure SetAllowEsc(On:boolean);
procedure SetColors(HiHot,HiNorm,LoHot,LoNorm,Off:byte);
procedure TurnPickOff;
function GetAllowEsc: boolean;
function GetText(Ptr:MenuItemPtr): StrVisible;
function GetMessage(Ptr:MenuItemPtr): StrVisible;
function GetID(Item:byte):word;
function GetActiveItem: byte;
function GetTotalItems: byte;
function GetPickOff: boolean;
function GetSubActive:boolean;
procedure DisplayAllItems;
function HotkeySelect(K:word): boolean;
procedure ChangeActiveItem(New:byte);
function FirstActiveItem: byte;
function AddPre(Txt:StrVisible;Hi:boolean):StrVisible;
function AddSuf(Txt:StrVisible;Hi:boolean):StrVisible;
function ItemPtr(Item:byte): MenuItemPtr;
procedure DisposeItems;
procedure ChangeMessage(Item:byte; Hi:boolean);
function LastKey: word;
function GetHelpID: word;
function ProcessKey(K:word; X,Y:byte):word; VIRTUAL;
function MenuZone(X,Y:byte):boolean; VIRTUAL;
procedure SetForPull; VIRTUAL;
function TargetPick(X,Y:byte): byte; VIRTUAL;
procedure DisplayItem(Item:byte;Hi,Msg:boolean); VIRTUAL;
procedure Remove; VIRTUAL;
function Activate: word; VIRTUAL;
procedure DrawEngine(eX,eY:byte); VIRTUAL;
procedure HelpTask(ID:word); VIRTUAL;
destructor Done; VIRTUAL;
end; {BaseMenuOBJ}
pWinMenuOBJ = ^WinMenuOBJ;
WinMenuOBJ = object (BaseMenuOBJ)
vStyle: byte;
vWinSaved: boolean;
vMenuBorder: byte;
vMenuTitle: byte;
vMenuIcons: byte;
{methods...}
constructor Init;
procedure SetStyleTitle(St:byte;Tit:StrVisible);
procedure Draw;
procedure MoveUp;
procedure MoveDown;
procedure MoveHome;
procedure MoveEnd;
function MousePressed(X,Y:byte):boolean;
function ProcessKey(K:word; X,Y:byte):word; VIRTUAL;
function MenuZone(X,Y:byte):boolean; VIRTUAL;
procedure SetForPull; VIRTUAL;
function TargetPick(X,Y:byte): byte; VIRTUAL;
procedure DisplayItem(Item:byte;Hi,Msg:boolean); VIRTUAL;
procedure Remove; VIRTUAL;
function Activate: word; VIRTUAL;
procedure DrawEngine(eX,eY:byte); VIRTUAL;
function Win: WinPtr; VIRTUAL;
destructor Done; VIRTUAL;
end; {WinMenuOBJ}
SubMenuPtr = ^MenuOBJ;
pMenuOBJ = ^MenuOBJ;
MenuOBJ = object (WinMenuOBJ)
vWin: WinPtr;
{methods...}
constructor Init;
function Win: WinPtr; VIRTUAL;
destructor Done; VIRTUAL;
end; {MenuOBJ}
pMoveMenuOBJ = ^MoveMenuOBJ;
MoveMenuOBJ = object (WinMenuOBJ)
vWin: MoveWinPtr;
{methods...}
constructor Init;
function Win: WinPtr; VIRTUAL;
destructor Done; VIRTUAL;
end; {MoveMenuOBJ}
pBarMenuOBJ = ^BarMenuOBJ;
BarMenuOBJ = object (BaseMenuOBJ)
{methods...}
constructor Init;
function GetX(Item:byte): byte;
procedure DisplayItem(Item:byte;Hi,Msg:boolean); VIRTUAL;
procedure DrawEngine(eX,eY:byte); VIRTUAL;
destructor Done; VIRTUAL;
end; {BarMenuOBJ}
BarHotKeyPtr = ^BarHotKeyItem;
BarHotKeyItem = record
HK:word;
ID:word;
NextNode: BarHotKeyPtr;
end; {BarHotKeyRecord}
pLotusMenuOBJ = ^LotusMenuOBJ;
LotusMenuOBJ = object (BarMenuOBJ)
vHKStack: BarHotKeyPtr;
vMenuBarVisible: boolean;
{methods...}
constructor Init;
procedure Draw;
procedure MoveLeft;
procedure MoveRight;
procedure MoveHome;
procedure MoveEnd;
procedure SetSpecialKey(HK:word;ID:word);
function HotKeyID(HK:word):word;
function GetHK(Item:byte):word;
procedure DisposeSpecialKeys;
function AltHKItem(K:word):word;
function MenuKey(K:word; X,Y:byte): boolean;
function MousePressed(X,Y:byte;var Choice:word):boolean;
function Push(K:word; X,Y:byte): word;
function ProcessKey(K:word; X,Y:byte):word; VIRTUAL;
function TargetPick(X,Y:byte): byte; VIRTUAL;
procedure Remove; VIRTUAL;
function Activate: word; VIRTUAL;
destructor Done; VIRTUAL;
end; {LotusMenuOBJ}
pPullMenuOBJ = ^